package com.xuecheng.content.convert;

import com.xuecheng.api.content.CourseBaseApi;
import com.xuecheng.api.content.model.dto.CourseBaseDTO;
import com.xuecheng.api.content.model.vo.CourseAuditVO;
import com.xuecheng.api.content.model.vo.CourseBaseVO;
import com.xuecheng.content.entity.CourseBase;
import com.xuecheng.content.entity.CoursePub;
import org.aspectj.weaver.ast.Var;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * <p></p>
 * <p>
 * 对象属性映射器编写：
 * 1.编写接口在接口类上添加mapstruct的注解
 *
 * @Mapper 2.在接口上编写转换的方法
 * po-> dto
 * pos  -> dtos
 * dto  ->  po
 * dtos -> pos
 * 3.通过api来生成接口的实例对象(mapstruct会在代码编译的过程中生成)
 * @Description:
 */
@Mapper
public interface CourseBaseConvert {

    CourseBaseConvert INSTANCE = Mappers.getMapper(CourseBaseConvert.class);

    // po-> dto
    /*
     * 1.如果两个类中的属性名称一致，默认进行赋值
     * 2.如果两个类中的属性名称不一致，通过注解来映射两个属性值
     *    @Mapping ：映射一个属性
     *    @Mappings ：映射对象属性
     *
     * */
    @Mapping(source = "id", target = "courseBaseId")
    CourseBaseDTO entity2dto(CourseBase courseBase);

    // pos  -> dtos
    /*
     * 集合数据的转换是依赖单个对象数据的转换方法
     * */
    List<CourseBaseDTO> entitys2dtos(List<CourseBase> courseBaseList);

    //dto->po
    @Mapping(source = "courseBaseId", target = "id")
    CourseBase dto2entity(CourseBaseDTO courseBaseDTO);

    //vo->dto
    CourseBaseDTO vo2dto(CourseBaseVO courseBaseVO);

    CourseBaseDTO auditvo2dto(CourseAuditVO vo);

//    List<CourseBase> dtos2entitys(List<CourseBaseDTO> courseBaseDTOS);



}
